package ten.test_10_10;

import java.util.Map;
import java.util.Scanner;

public class TestMain2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = scanner.nextInt();
        }
        System.out.println(bruteForce(arr,m));
    }
    public static int bruteForce(int[] arr, int m) {
        int n = arr.length;
        int maxSum = 0;
        for (int mask = 0; mask < ( 1 << (n - 1)); mask++) {
            int[] subArrays = new int[m];
            int subArrayCount = 0;
            int start = 0;
            for (int i = 0; i < n - 1; i++) {
                if ((mask & (1 << i)) > 0) {
                    subArrays[subArrayCount++] = calculateGCD(arr,start,i + 1);
                    start = i + 1;
                }
            }
            subArrays[subArrayCount++] = calculateGCD(arr,start,n);
            if(subArrayCount == m) {
                int sum = 0;
                for (int i = 0; i < m; i++) {
                    sum += subArrays[i];
                }
                maxSum = Math.max(maxSum,sum);
            }
        }
        return maxSum;
    }
    public static int calculateGCD(int[] arr,int start, int end) {
        int gcdValue = arr[start];
        for (int i = start + 1; i < end; i++) {
            gcdValue = gcd(arr[i],gcdValue);
        }
        return gcdValue;
    }
    public static int gcd(int a,int b) {
       int min = Math.min(a,b);
       for (int i = min; i >= 1; i--) {
           if(a % i == 0 && b % i == 0) {
               return i;
           }
       }
       return 1;
    }
//    private static int[] computePrefixDCD(int[] a) {
//        int n = a.length;
//        int[] prefixGCD = new int[n + 1];
//        prefixGCD[0] = 0;
//        for (int i = 1; i <= n; i++) {
//            prefixGCD[i] = gcd(a[i - 1], prefixGCD[i - 1]);
//        }
//        return prefixGCD;
//    }
//    public static int maxGCDSum(int[] a,int m) {
//        int n = a.length;
//        int[] prefixGCD = computePrefixDCD(a);
//        int[][] dp = new int[n + 1][m + 1];
//        for (int i = 1; i <= n; i++) {
//            for (int j = 1; j <= Math.max(i,m); j++) {
//                for (int k = j - 1; k <= i; k++) {
//                    dp[i][j] = Math.max(dp[i][j], dp[k][j - 1] + (prefixGCD[i] - (k == 0 ? 0 : prefixGCD[k])));
//                }
//            }
//        }
//        return dp[n][m];
//    }
    //    public static int solve(int[] arr, int m) {
//        int n = arr.length;
//        int[][] dp = new int[n+ 1][m + 1];
//        for (int i = 0; i <= n; i++) {
//            dp[i][1] = dp[i - 1][1] == 0 ? arr[i - 1] : gcd(dp[i - 1][1],arr[i - 1]);
//        }
//        for(int i = 1; i <= n; i++) {
//            for (int j = 1; j < Math.min(i,m); j++) {
//                int gcdValue = 0;
//                for (int k = j - 1; k <= i; k++) {
//                    gcdValue = gcdValue == 0 ? arr[k] : gcd(gcdValue,arr[k]);
//                    dp[i][j] = Math.max(dp[i][j],dp[k ][j - 1] + gcdValue);
//                }
//            }
//        }
//        return dp[n][m];
//    }
}
